package top101K.linkedList;

import java.util.List;

/**
 * @Author quan
 * @Description 反转单链表
 * @Date 2023/7/24 19:49
 */
public class Demo1_ReverseList {
    /**
     * 思路：
     * （1）cur表示头结点，定义一个空节点pre
     * （2）存储cur的下一个节点值cur_next，再将cur的引用指向pre；
     * （3）更新pre为当前cur，更新cur为存储cur的下一个节点值cur_next
     * （4）当cur走向null的时候，pre就是该链表的头结点
     * @param head ListNode类
     * @return ListNode类
     */
    public ListNode ReverseList (ListNode head) {
        //pre表示前一个结点，初始化为null
        ListNode pre = null;
        //当前节点指针
        ListNode cur = head;
        //循环迭代
        while (cur!=null){
            //存储当前cur节点的下一个节点
            ListNode cur_next = cur.next;
            //更改指针到前一个结点
            cur.next = pre;
            //此时的前一个结点就为pre了
            //更新pre值
            pre = cur;
            //更新当前节点指针
            cur = cur_next;
        }
        //最后的cur就是头结点
        return pre;
    }
}
